Computer systems can comprise input devices, output devices, one or more CPUs and storage devices that can include semiconductor RAM, EEPROM, disc drives, CD drives, other storage media, and intelligent controllers. An operating system can control the configuration of various peripherals, such as display adapters and network interfaces, for example, and provides an application environment and a data system that allocates or de-allocates storage capacity as files are created, modified, or deleted.
Specialized computer systems, such as servers and storage arrays, also employ a system for allocating storage capacity that can be accessed through a network or other connection. Data can be stored across a plurality of disc drives in redundant storage formats such as a redundant array of independent drives (RAID), for example. User data, and any mirror data or parity data (“redundant data”), is mapped to one or more areas on one or more disc drives. Configuration information describing the manner in which data is stored to one or more disc drives is contained in tables or other data structures termed metadata. As files are created, modified, or deleted, the metadata is updated to reflect the allocation or de-allocation of storage capacity.
The performance of the computer system in passing host access commands (both store and retrieve commands) to the storage array can be enhanced by write-caching the access commands and immediately acknowledging them to the host. This permits the actual transfer between the storage array and the cache to take place at an optimal time in relation to holistically viewing system resources against system needs. For example, many times access commands that are pending in the command queue can be performed when the data storage device is otherwise not presently needed by the system.
However, allowing the command queue to grow deep can bog down the system throughput performance, and makes data mismatches more problematic by accumulating an excessive number of acknowledged but not yet satisfied access commands. For this reason it is desirable to pass commands in the command queue as efficiently as possible.
Accordingly, there is a continual need for improvements in the manner in which command queues are managed. It is to these and other improvements that the embodiments of the present invention are generally directed.